package com.rin.design_pattern.factory;

import com.rin.design_pattern.common.shape.*;

/**
 * @author RinMi
 * @since 2023/5/25
 * <p>
 * 工厂模式属于创建型模式
 * <p>
 * 定义一个创建对象的接口，让其子类决定
 * 工厂模式主要用于解决接口选择的问题
 * <p>
 * 问：是否能够使用反射机制，通过传入实现类的.class利用工厂返回相应的实例，从而避免多次创造工厂类的实例。
 * 答：工厂模式是将接口的实现类集合，接口实现类对调用者是不透明的，因此调用者不能通过传入.class获取实例。
 */
public class ShapeFactory {

    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (ShapeType.CIRCLE.equals(shapeType)) {
            return new Circle();
        }
        if (ShapeType.SQUARE.equals(shapeType)) {
            return new Square();
        }
        if (ShapeType.RECTANGLE.equals(shapeType)) {
            return new Rectangle();
        }
        return null;
    }

}
